// api.js - 后端接口调用工具

const config = require('./config');

const BASE_URL = config.baseUrl; // 从配置文件获取后端接口基础URL

// 请求方法封装
const request = (url, method, data, header = {}) => {
  return new Promise((resolve, reject) => {
    // 获取存储的token
    const token = wx.getStorageSync('token');
    if (token) {
      header['Authorization'] = 'Bearer ' + token;
    }
    
    // 添加通用header
    header['Content-Type'] = header['Content-Type'] || 'application/json';
    header['tenant-id'] = '1'; // 添加租户ID
    
    const fullUrl = BASE_URL + url;
    
    // 记录请求信息
    console.log('=== API请求详情 ===');
    console.log('URL:', fullUrl);
    console.log('Method:', method);
    console.log('Data:', data);
    console.log('Headers:', header);
    
    wx.request({
      url: fullUrl,
      method: method,
      data: data,
      header: header,
      success: (res) => {
        console.log('=== API响应详情 ===');
        console.log('Status Code:', res.statusCode);
        console.log('Response Data:', res.data);
        console.log('Response Headers:', res.header);
        
        // 处理响应结果
        if (res.statusCode === 200) {
          // 判断业务状态码
          if (res.data.code === 0) {
            resolve(res.data);
          } else {
            // 业务错误 - 输出详细错误信息
            console.error('=== 业务错误详情 ===');
            console.error('Error Code:', res.data.code);
            console.error('Error Message:', res.data.msg);
            console.error('Error Data:', res.data.data);
            console.error('Full Response:', res.data);
            
            wx.showToast({
              title: res.data.msg || '请求失败',
              icon: 'none',
              duration: 2000
            });
            reject(res.data);
          }
        } else if (res.statusCode === 401) {
          console.error('=== 401未授权错误 ===');
          console.error('Response:', res);
          
          // 未授权，清除token并跳转到登录页
          wx.removeStorageSync('token');
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none',
            duration: 2000
          });
          reject(res.data);
        } else if (res.statusCode === 500) {
          console.error('=== 500服务器错误 ===');
          console.error('Status Code:', res.statusCode);
          console.error('Response Data:', res.data);
          console.error('Full Response:', res);
          
          // 500错误，显示详细信息
          const errorMsg = res.data && res.data.msg ? res.data.msg : '服务器内部错误';
          wx.showToast({
            title: errorMsg,
            icon: 'none',
            duration: 3000
          });
          reject(res.data || res);
        } else {
          console.error('=== HTTP错误 ===');
          console.error('Status Code:', res.statusCode);
          console.error('Response:', res);
          
          // 其他HTTP错误
          wx.showToast({
            title: '网络错误(' + res.statusCode + ')',
            icon: 'none',
            duration: 2000
          });
          reject(res.data || res);
        }
      },
      fail: (err) => {
        console.error('=== 网络请求失败 ===');
        console.error('Error:', err);
        console.error('URL:', fullUrl);
        console.error('Method:', method);
        console.error('Data:', data);
        
        wx.showToast({
          title: '网络请求失败',
          icon: 'none',
          duration: 2000
        });
        reject(err);
      }
    });
  });
};

// 封装具体请求方法
const api = {
  // GET请求
  get: (url, data = {}) => {
    return request(url, 'GET', data);
  },
  
  // POST请求
  post: (url, data = {}) => {
    return request(url, 'POST', data);
  },
  
  // PUT请求
  put: (url, data = {}) => {
    return request(url, 'PUT', data);
  },
  
  // DELETE请求
  delete: (url, data = {}) => {
    return request(url, 'DELETE', data);
  },

  // 上传文件
  upload: (url, filePath, name = 'file', formData = {}) => {
    return new Promise((resolve, reject) => {
      const token = wx.getStorageSync('token');
      const header = {};
      if (token) {
        header['Authorization'] = 'Bearer ' + token;
      }
      header['tenant-id'] = '1'; // 添加租户ID
      
      wx.uploadFile({
        url: BASE_URL + url,
        filePath: filePath,
        name: name,
        formData: formData,
        header: header,
        success: (res) => {
          if (res.statusCode === 200) {
            // 注意：uploadFile返回的res.data是字符串，需要手动转换为对象
            const data = JSON.parse(res.data);
            if (data.code === 0) {
              resolve(data);
            } else {
              wx.showToast({
                title: data.msg || '上传失败',
                icon: 'none',
                duration: 2000
              });
              reject(data);
            }
          } else {
            wx.showToast({
              title: '上传失败(' + res.statusCode + ')',
              icon: 'none',
              duration: 2000
            });
            reject(res);
          }
        },
        fail: (err) => {
          wx.showToast({
            title: '上传请求失败',
            icon: 'none',
            duration: 2000
          });
          reject(err);
        }
      });
    });
  }
};

// API接口定义
const API = {
  // 用户认证相关接口
  auth: {
    // 微信小程序登录（使用system模块）
    wxLogin: (code) => {
      return api.post('/admin-api/system/auth/weixin-mini-app/login', {
        code
      });
    },
    
    // 微信用户注册（使用system模块）
    registerWxUser: (data) => {
      return api.post('/admin-api/system/auth/weixin-mini-app/register', data);
    },
    
    // 手机验证码登录
    smsLogin: (mobile, code) => {
      return api.post('/admin-api/system/auth/sms-login', {
        mobile,
        code
      });
    },
    
    // 发送短信验证码
    sendSmsCode: (mobile) => {
      return api.post('/admin-api/system/auth/send-sms-code', {
        mobile,
        scene: 21 // 登录场景
      });
    },
    
    // 获取用户信息
    getUserInfo: () => {
      return api.get('/admin-api/system/auth/get-permission-info');
    }
  },
  
  // 用户相关接口
  user: {
    // 获取用户信息
    getProfile: () => {
      return api.get('/admin-api/system/user/profile/get');
    },
    // 更新用户信息
    updateProfile: (data) => {
      return api.put('/admin-api/system/user/profile/update', data);
    },
    // 更新用户头像
    updateAvatar: (filePath) => {
      return api.upload('/admin-api/system/user/profile/update-avatar', filePath, 'avatarFile');
    }
  },
  
  // 文件上传接口
  file: {
    // 上传文件
    upload: (filePath, formData = {}) => {
      return api.upload('/infra/file/upload', filePath, 'file', formData);
    }
  },
  
  // 长征路相关接口
  longMarch: {
    // 获取长征路线点位信息
    getRoutePoints: () => {
      return api.get('/app/long-march/route/points');
    },
    // 获取重要节点信息
    getKeyPoints: () => {
      return api.get('/app/long-march/key-points');
    }
  },
  
  // 活动相关接口
  activity: {
    // 获取活动列表
    getList: (params) => {
      return api.get('/app/activity/list', params);
    },
    // 获取活动详情
    getDetail: (id) => {
      return api.get(`/app/activity/get?id=${id}`);
    },
    // 报名活动
    apply: (data) => {
      return api.post('/app/activity/apply', data);
    }
  },
  
  // 步数统计相关接口
  steps: {
    // 获取用户步数统计
    getStats: () => {
      return api.get('/admin-api/app/steps/stats');
    },
    // 同步微信步数
    syncWxSteps: (data) => {
      return api.post('/admin-api/app/steps/sync-wx', data);
    },
    // 解密微信运动数据
    decrypt: (data) => {
      return api.post('/admin-api/app/steps/decrypt-werun', data);
    }
  }
};

module.exports = API; 